腾讯游戏程序面经+面试官建议!
不久前刚发过的腾讯游戏策划岗位的面经(点此回顾),受到了许多准游戏策划的欢迎。而今天,小编给大家带来的是,面试者在面试腾讯游戏程序岗位时的心路历程,以及腾讯面试官对准程序员的走心建议。
俗话说得好,“男怕入错行,女怕嫁错郎”,一入程序深似海,从此休息是路人!程序员十分辛苦,加班是家常便饭,业余时间少,连陪女朋友的时间也少,加上职业病等等,称为IT民工真不为过。所以在入这行之前你一定做好自己的人生规划和选择,你真的准备好了吗?
一、面试者怎么看?
小A 岗位:开发实习生 (2016年校招)
面试地点:腾讯-深圳
分享一下个人经历。从开始准备到最后尘埃落定,和鹅厂总共纠缠了近10个月,所幸最终拿到Offer,也算万事完满。
2015.12
12月中旬,和一读研学长讨论今后出路。本觉得以自己的水平万不可眼界过高放眼鹅厂这种互联网的顶尖公司,但被学长一番“不想当将军的兵不是好兵”的理论说服,以“报最好的希望,做最坏的打算”心态开始为进军鹅厂做准备。决定之后买了不少书,开始努力填补基础知识的系列不足。大约一周后,成功拉室友入坑,革命友情伊始。
2016.01
约莫一月上旬,开始在网上找题库,由易而难刷题。
2016.03
鹅厂来学校做宣讲会,开始招收暑期实习生,抱着试一试的心态投了简历。
2016.04.02
做了笔试。由于当时的题库还未刷完,笔试时心里略虚,但总的来说发挥出了平时水平的百分之八十。还算满意。
2016.04.08
收到一面面试通知。
2016.04.09
早上9点到达面试酒店,办理系列手续后,10点进行一面。一面是技术面,面试官说不上和蔼,但也不咄咄逼人。由于时间过去略久,具体面试题目记不大全了,大概就是刚开始让做了自我介绍,之后问了C++和Java之间的异同点、相互调用以及数据结构、系统架构、操作系统、多线程等方面的问题,比较基础。
2016.04.11
一面显示通过。当天晚饭时间收到短信,通知次日早上二面,依旧10点。
2016.04.12
开始二面。这次的面试官较一面和蔼。无自我介绍,直入主题开始问我简历上写的两个项目。第一个项目回答的不错,但因为第二项目不算全程参与,对有些部分的技术和架构略知而非详解,所以回答不甚理想。之后问了排序、Java的垃圾回收机制、activity 的 4种启动模式、开发模式一类的问题。虽然都答出来了,但是答的不算好。最后15分钟让写了一个题 - 乱序字符串。
2016.04.15
早上醒来查看自己的面试状态,显示已跪。难过了一早上,但介于面试时着实表现不佳,也无甚怨言。下午恢复备战状态,继续刷题。
2016.05
由于实习面试失败后略受刺激,刷题速度大增。五月中旬完成第一遍刷题。开始刷第二轮。二轮刷题略有偏重,主要精力放在一刷时做了标记的那些题上,对之前会做的题目只大约看看。二刷过程中还注重了对参考答案的研究。开始有意通过标准解答来提升自己代码的运行效率和可读性。
2016.06
临时接了一个项目,整一个月花在项目上,加之即将期末考,备战进程暂停一月有余。
2016.08
完成二刷。开始对之前记录的刷题总结、看书时记录的不熟悉知识点进行整理复习。
2016.09
校招正式启动,铺天盖地的宣讲会,基本上就忙于宣讲会,投简历,面试。虽然此时对鹅厂的执念已经颇深,但后路还是要备的。鹅厂开始做校招宣讲会时手头已有一小公司的offer,心稍定。在线投了简历,但没去鹅厂的宣讲会。一是当时与一面试冲突,二是感觉听或不听反正是一定要去鹅厂的。
2016.09.14
晚上19:00参加了鹅厂的笔试。笔试分为两个部分,不定项选择和大题。覆盖范围很广,包括数据结构、操作系统、动态规划、线程等。但总体不难,如果有好好复习基础知识一般都能过,不过高分不易。
2016.09.16
笔试通过,晚上21点多接到一面短信,约了第二天下午14:00。
2016.09.17
早上很早起来又把早就快翻烂了的笔记本翻了一遍,在心里过了一遍简历上的项目。第二个项目招聘季开始前就搞清楚了,不担心出现实习面试时的囧像,但对于6月做的项目总感觉准备不够。9点给当时一起做项目的同学打了电话,把项目从头到尾好好整理了遍。
下午13:00不到就到了面试地点。忐忑的等到14:00,准时面试。
一面是技术面,无自我介绍,主要考察基础知识。问了数据结构、数据库、多态、虚拟机、虚函数、内存泄漏、进程和线程的区别等。问数据结构的时候还问了题 -带环链表。
总体不难,感觉面试官较满意,所以面试完不到三个小时就收到短信,约了18号9点半的面试。
2016.09.18
六点起床,8:03到达面试地点。9点35分开始面试。二面为技术面,传说中的压力面。但是由于面试官很nice,并没有感觉到太大压力。
无自我介绍。首先让我简要的介绍做过的项目,然后就项目里面涉及的一些技术点进行提问,稍微问了点团队成员工作分配及相互协调的问题。之后问了SendMessage与PostMessage的区别、cookie、Android的activity、多线程、嵌入式实时操作系统等。然后给了一个程序题,关于排序的,之前在网上反复练过,所以迅速写出,但依旧检查许久后才交。
2016.09.20
室友收到鹅厂拒信。我并未收到任何通知,略慌。
2016.09.21
健身结束发现手机里躺着HR面的通知,完美!
2016.09.22
下午14:00参加HR面。无外乎讨论人生、理想、人生规划、家庭情况、家乡、为什么不考研、投了哪些公司、至今手头有几个Offer等,并未被问到情感问题。整场面试很轻松。
2016.09.23
同班一大神收到鹅厂offer。我无动静,焦躁。
2016.09.25
收到offer,请学长出去吃了一顿大餐以示庆祝。
至此,进军鹅厂的战役以胜利告终。
二、面试官怎么看?
腾讯北极光工作室群 客户端组长 安柏霖(客户端通道面试官)
工作也有10多年了,做客户端通道面试官也有一些时间,看到有些同学非常的有热情,但是走了弯路,把有限的精力放错了地方,不免感觉颇为可惜,加上平时在各个渠道也收到不少这方面相关的问题,这里就自己的经验写一个小系列,来谈下入行的问题。
1. 决定的瞬间
工作也有10多年了,和很多人聊过,大家怎么开始想做游戏,怎么开始入行的。
相当多的人会经历一个转折点,那个点上你突然意识到这个就是你要做一辈子的工作,有的是到朋友家玩的时候,玩一个游戏,突然意识到自己要做这个;我是准备GRE休息的时候,在bbs上看到《doom启世录》某一个章节的时候;有的同事是已经工作了,而且根本不是编程方面,自己在家玩游戏的时候; 有的是在传统型的软件企业里,厌倦了一成不变的生活,追求一个变化剧烈需要一直学习的生活;有的一直就是对于视觉上的东西,对于绚丽的东西感兴趣。。。
丝毫不意外的是:在开发历程中,非常的有持续力,能保持专注和成长的同事,普遍的特点就是对于游戏本身有着持久浓烈的热情。
不管如何,当这个瞬间出现,你被击中了,或许你就属于游戏开发,游戏开发也属于你,不妨放下种种担忧牵挂,就开始你的探险吧。
2.工作相比考研的优势
对于学生来说,到了大四就是一个选择,是去游戏公司工作还是去考研,个人的推荐的是当你下定决心去做游戏,那么尽早的开始准备起来,到尽可能好的团队中去开始游戏开发。
大家会认同,如果能进好公司好项目,当然就及早去了,不然读研之后的目标不也是如此么。
只是现实种种原因不能如愿啊,比如本科玩多了,心理还没准备好,和高几届读研的师兄比有劣势等等等等。
这里很多想做游戏的同学,最终还是选择了读研之后再工作,很大的原因就是没有意识到,同样的时间点,工作的意义有多大。
(1)经验的“金山”
这里常见一个误区就是,本科进到项目组里,作为小弟,也是各种打杂,不如在学校里自己做做游戏多学习等等。
但是即便硕士毕业进入项目组也是可能从打杂开始的,这里不妨说下我研究生毕业刚刚进入育碧的时候,当时项目组里没有data manager,于是我就在一开始就变成这个data“manager”了,就是去负责处理各种perforce相关的事物,完全不是编程的工作,后来招到了data manager,我就开始做一些简单的工作,从截图开始,然后就是给各位资深程序“打杂”,大大们在做优化,相应模块有bug,我就去跟。。。第一年相当的时间就是这样度过的。
这个从项目角度来看其实非常正常的,项目组总是追求最大化的性价比,所以人力总是不足。那么资深程序去做最大化输出就是最合理的安排,如果一定要有人去打杂,当然就是输出能力最低的新人来做了,这就是骨感的现实。
有人留言说,一毕业就能做高端的事情好羡慕等等,其实是一毕业就一段时间不能编程了。
但是即便如此,依旧是能够获得比学校里好得多的成长,主要就是你能接触到项目组的代码,你可以看到整个项目如何一点点实现的;看到资深程序如何写代码的,尤其是开始帮资深同事debug的时候,更是能上手去看,这个真是一个大开眼界的过程,中间不懂得地方去问问,一般也能得到比较好的解答。
说到底,有积累的团队好比一座金山放在你面前,进去就做主力培养,相当于把金子送到你面前让你捡,进去就打杂,那你完全还可以去挖,关键是要有能接触到的金山。
而像腾讯&网易这种,公司开发了n款游戏的公司,你更可以跨项目的接触到高质量资源,可以去问更多的大牛问题,这个副本掉落,真的可以有。
(2)更高级别的学习
很多时候我们会觉得,在学校里时间更充裕更自由,没有考评没有leader过来逼我加班,可以更好地学习等等。
实际情况是,实际项目中,我们更容易进入学习的更高阶段:切身知道学习的意义,以及将知识综合的用于实践。
当时刚工作时候,看老司机们的代码的时候,发现大家对于cache性能,多线程,各种编程模式,语言特性等的驾驭非常的好,可以说多个领域的知识(语言,算法,操作系统,硬件)都非常好的融合到一起,在一票代码中体现。
而我当时对于这些还是停留在书本上的概念阶段,并没有特别深刻的理解(即便在考试中分数没问题),也不可能有充分的理解,这个理解就是要这样在高挑战型项目里,综合纯熟的应用出来才能达到。
所幸当时学校的书都是非常经典的,我也带到了上海,又翻出来就这些章节反复的研读,而且这次读的时候,可以结合代码,几个科目可以联系起来,完全就是一种“I was blind, now I see”的感觉。
而且读好了之后,就有用了,能更好的理解老司机们的代码,甚至偶尔还能提出点不同的看法,到后面自己也能写出这样的代码,可以应用到实际的游戏里,带来性能和效果的提升,可以见玩家的感觉,这个时候知识的真正意义才呈现。
所以,在学校的时候,学习的第一个层次:概念性的理解到位,知道这个是什么,能够通过考试就差不多了,学生时代也算考试一把好手,再把书看几遍也就是这个水平了。
要达到第二层次深刻理解,融会贯通,在真正的需要这些东西的大型项目中去应用方是最好的方式。
相比之下,在学校里,部分可以学习到很好地研究方法等等种种优势,但是绝大多数情况,是不如在正规项目组里去磨练和学习来的更好。
(3)工作的相对优势
上面聊了这么多,其实也是自己的经历有关,本科时候并没有做游戏的想法,研究生才有,即便研究生所在的实验室(老板非常的强力,做的项目也给力)很给力,自己也在认真地做和学,但是工作之后才发现,这两年的成长比起实际项目来说真是微乎其微,近乎在浪费时间。
所以如果我们定下来想做游戏,大可以把工作和读研都作为一个纯粹的学习阶段来看待,在好的团队里工作中可以:
- 有更好的磨练机会,更好的学习资源
- 让我们更好更深刻的理解学习内容
这个意义是非常大的,大到值得我们去在本科的早期,好好准备,尽早到前线去开始磨炼。
话说回来,万事无绝对,这里的工作的意义是和团队水平有很大关联的,越是有经验越是严肃做项目的,对于成长来说就越好,如果种种原因,让人无法吸收和学习,那就要三思了。
前面聊了及早工作的意义,要想在大四秋季招聘的时候,就能获得工作机会,尤其是在好团队中的机会,这个就需要我们有相当的积累。
3.成本
这里在招聘中常常见到的一个情况是,虽然我想做游戏,但是实验室老师是做完全不同的方向,但是我也ok,只要努力了,有进步总是好的。
这个就是一个典型的误区,这里大家需要对于成本有一个较好的认识。
做A事情的成本就是同样时间你能做的最有价值的事情,可能是到好的团队中去实习,可能是你专项的阅读游戏开发的书和做实际的项目。
本来你可以在同样的时间里,得到很大的成长,但是却做了“有些进步”的事情,而且感觉还挺ok,这真是太可惜了。
最后
不管你是应届生还是已经工作了一年、五年还是十年,这些经验和建议还是有些价值的:
1. 在校生趁着在校期间,多做完整项目,多写代码,不要浪费任何能积累经验的机会。
2. 学技术要学主流框架,学 Node 要学 Express,学 Java 就不要忘了 SSH,学 Ruby 首学 Rails。
3. 永远要有超前的意识,关注云计算、docker、微服务、Devops、Baas 等新技术形态。
4. 要有自己的思考和抉择,对于产品经理提出的不合理需求,一定要学会积极主动站出来,就产品功能提出自己的合理化建议。
5. 别人没有义务一定要帮你,你要让你值得别人来帮,你可以自己摸索,也可以找前辈请教,态度好一些,干活勤快一些,自然多一些机会获得前辈指教。
6. 不要怕踩坑,踩着踩着你也许就成了大牛,不止学会填坑了,甚至也学会挖坑!
----------------------
今日推荐
添加小编微信,可享双重福利
1.加入GAD程序猿交流基地
获取行业干货资讯,观看大牛分享直播
2.领取60G独家程序资料,地址在小编朋友圈
包括腾讯内部分享、文章教程、视频教程等全套资料
↓长按添加小编GAD苏苏↓